Глава описывает любые отличия в поведении системных компонент на Эльбрусе, из-за которых может понадобиться адаптация программ для их корректной работы.
Компилятор lcc стремится к максимальной совместимости с gcc. Версия lcc-1.24 соответствует gcc-7.3.0.
Ряд билтинов (builtin) gcc поддержан с ограничениями. Некоторые из них вызваны особенностями реализации компилятора, другие отсутствием практической необходимости. С выходом новых версий lcc расширяется состав поддержанных билтинов.
Ограничения перечислены в разделе документации на компилятор:
/opt/mcst/doc/builtin_gnu.html
.
Информация о поддержанных прагмах в документации компилятора:
/opt/mcst/doc/pragma.html
Для e2k не поддержано в режиме -m128.
Nested параллелизм не поддержан. Если при исполнении уже распараллеленного цикла встречаются циклы, которые нужно распараллелить, то эти (вложенные) циклы будут исполняться последовательно.
Не поддержан clause collapse.
Для C/C++ после директивы #pragma omp
всегда должен следовать statement языка.
Проблемы могут возникнуть для #pragma omp barrier
и #pragma omp flush
, если за ними нет statement’а.
Для обхода проблемы рекомендуется в следующей строке поставить пустой statement, например “0;” или “;”
Переменные, перечисленные в clause’ах private, lastprivate, firstprivate и threadprivate должны иметь скалярный базовый тип или массив скалярного базового типа. В противном случае результат программы неопределен.
Директива #pragma omp for
не поддержана для итераторов C++.
Для C/C++ clause’ы if и num_threads своими параметрами могут иметь только константы и переменные целого типа, выражения не допускаются.
Функция makecontext()
для управления контекстом пользователя реализована на Эльбрусе с другой семантикой.
Отличия:
Вместо вызова makecontext()
необходимо вызывать makecontext_e2k()
;
В конце области видимости необходимо вызвать freecontext_e2k()
.
makecontext_e2k()
возвращает значение int
, а не void
.
Значение вызова необходимо проверять на статус ошибки (< 0).
Функции дано другое название, чтобы отображать несовместимость с реализацией на других архитектурах.